Frm.set_df_property vs. frm.toggle_

I see from the docs Form Scripts that there are 2 options to conditionally set df property of enable/read-only, show/hide, and mandatory:
First with:

if condition {

and second with:



  1. what is the differences of using the set_df_property and the toggle_ code?
  2. The docs said set_df_property will refresh the field. Does it mean we have to use frm.refresh() for the toggle_?
  3. What is the behaviour of toggle? What is it toggled from?
  4. How does the relation between the toggle_ and the same settings in the doctype field setup?

Thank you and sorry for the long list of questions.